package estructurasDeDatos.List2;

import java.io.Serializable;

import estructurasDeDatos.IIterador;

public class ListIterador<T>implements IIterador<T> , Serializable{

	/**
	 * posicion actual del iterador
	 */
	private ListElement<T> actual  ; 
	
	/**
	 * Constructor crea un nuevo iterador en la primera posicion de la lista
	 * @param first primer elemento de la lista
	 */
	public ListIterador ( ListElement<T> first ) {
		actual = first ;
	}
	
	@Override
	/**
	 * retorna el valor del siguiente elemento en la lista considerando la posicion del iterador
	 * @return valor del siguiente elemento en la lista
	 */
	public T getNext() {
		T res = actual.getValue() ; 
		actual = actual.getSiguiente();
		return res ; 
	}
	
	/**
	 * Asigna la posicion actual del iterador
	 * @param act elemento que define la nueva posicion del iterador
	 */
	public void setActual ( ListElement<T> act ) { 
		actual = act ;
	}
	
	/**
	 * retorna el  siguiente elemento en la lista considerando la posicion del iterador
	 * @return siguiente elemento en la lista
	 */
	public ListElement<T> getNextElement() {
		ListElement<T> res = actual ; 
		actual = actual.getSiguiente();
		return res ; 
	}

	@Override
	/**
	 * Pregunta si la lista contiene un siguiente elemento considerando la posicion del iterador
	 * @return siguiente elemento en la lista
	 */
	public boolean hasNext() {
		if ( actual != null) 
			return true ; 
		return false;
	}
	
}
